/**
 * @package Joostina
 * @copyright Авторские права (C) 2008 Joostina team. Все права защищены.
 * @license Лицензия http://www.gnu.org/licenses/gpl-2.0.htm GNU/GPL, или LICENSE.php
 * Joostina! - свободное программное обеспечение распространяемое по условиям лицензии GNU/GPL
 */

function jadd(elID, value) {
    SRAX.get(elID).value = value;
    return;
}

// установка куков
setCookie = function (sName, sValue, nDays) {
    var expires = "";
    if (nDays) {
        var d = new Date();
        d.setTime(d.getTime() + nDays * 24 * 60 * 60 * 1000);
        expires = "; expires=" + d.toGMTString();
    }
    document.cookie = sName + "=" + sValue + expires + "; path=/";
};
// получение куков
getCookie = function (sName) {
    var re = new RegExp("(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)");
    var res = re.exec(document.cookie);
    return res != null ? res[3] : null;
};

// прорисовка информации о успешно выполненной операции
function mess_cool(mess) {
    SRAX.replaceHtml('status-info', mess);
    SRAX.get('status-info').className = 'message';
    SRAX.get('status-info').style.display = 'block';
}
// прорисовка информации о неудавно выполненной операции
function mess_bad(mess) {
    SRAX.replaceHtml('status-info', mess);
    SRAX.get('status-info').className = 'jwarning';
    SRAX.get('status-info').style.display = 'block';
}

// смена статуса публикации, elID - идентификатор объекта у которого меняется статус публикации
function ch_publ(elID, option) {
    $('#img-pub-' + elID).attr('src', 'images/aload.gif');
    $.get('ajax.index.php?option=' + option + '&task=publish&id=' + elID, function (data) {
        $('#img-pub-' + elID).attr('src', 'images/' + data);
    });
    return false;
}
// смена группы доступа, elID - идентификатор элемента у котогоменяется доступ, aCC - группа доступа
function ch_access(elID, aCC, option) {
    SRAX.replaceHtml('acc-id-' + elID, '<img src="images/aload.gif" />');
    dax({
        url:'ajax.index.php?option=' + option + '&task=access&id=' + elID + '&chaccess=' + aCC,
        id:'acc-id-' + elID,
        callback:function (resp, idTread, status, ops) {
            if (SRAX.debug.responseText != 2) {
                SRAX.replaceHtml('acc-id-' + elID, resp.responseText);
            } else {
                SRAX.replaceHtml('acc-id' + elID, '<img src="images/error.png" />');
            }
        }
    });
    return false;
}

function jtoggle_editor() {
    jeimage = SRAX.get('jtoggle_editor');
    jeimage.src = 'images/aload.gif';
    dax({
        url:'ajax.index.php?option=com_admin&task=toggle_editor',
        id:'jte',
        callback:function (resp, idTread, status, ops) {
            jeimage.src = resp.responseText;
        }
    });
    return false;
}

// general utility for browsing a named array or object
function xshow(o) {
    s = '';
    for (e in o) {
        s += e + '=' + o[e] + '\n';
    }
    alert(s);
}

/**
 * Writes a dynamically generated list
 * @param string The parameters to insert into the <select> tag
 * @param array A javascript array of list options in the form [key,value,text]
 * @param string The key to display for the initial state of the list
 * @param string The original key that was selected
 * @param string The original item value that was selected
 */
function writeDynaList(selectParams, source, key, orig_key, orig_val) {
    var html = '<select ' + selectParams + '>';
    var i = 0;
    for (x in source) {
        if (source[x][0] == key) {
            var selected = '';
            if ((orig_key == key && orig_val == source[x][1]) || (i == 0 && orig_key != key)) {
                selected = 'selected="selected"';
            }
            html += '\n<option value="' + source[x][1] + '" ' + selected + '>' + source[x][2] + '</option>';
        }
        i++;
    }
    html += '\n</select>';

    document.writeln(html);
}

/**
 * Changes a dynamically generated list
 * @param string The name of the list to change
 * @param array A javascript array of list options in the form [key,value,text]
 * @param string The key to display
 * @param string The original key that was selected
 * @param string The original item value that was selected
 */
function changeDynaList(listname, source, key, orig_key, orig_val) {
    var list = eval('document.adminForm.' + listname);
    // empty the list
    for (i in list.options.length) {
        list.options[i] = null;
    }
    i = 0;
    for (x in source) {
        if (source[x][0] == key) {
            opt = new Option();
            opt.value = source[x][1];
            opt.text = source[x][2];
            if ((orig_key == key && orig_val == opt.value) || i == 0) {
                opt.selected = true;
            }
            list.options[i++] = opt;
        }
    }
    list.length = i;
}

/**
 * Adds a select item(s) from one list to another
 */
function addSelectedToList(frmName, srcListName, tgtListName) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);
    var tgtList = eval('form.' + tgtListName);
    var srcLen = srcList.length;
    var tgtLen = tgtList.length;
    var tgt = "x";
    //build array of target items
    for (var i = tgtLen - 1; i > -1; i--) {
        tgt += "," + tgtList.options[i].value + ","
    }
    for (var i = 0; i < srcLen; i++) {
        if (srcList.options[i].selected && tgt.indexOf("," + srcList.options[i].value + ",") == -1) {
            opt = new Option(srcList.options[i].text, srcList.options[i].value);
            tgtList.options[tgtList.length] = opt;
        }
    }
}

function delSelectedFromList(frmName, srcListName) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);
    var srcLen = srcList.length;
    for (var i = srcLen - 1; i > -1; i--) {
        if (srcList.options[i].selected) {
            srcList.options[i] = null;
        }
    }
}

function moveInList(frmName, srcListName, index, to) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);
    var total = srcList.options.length - 1;
    if (index == -1) {
        return false;
    }
    if (to == +1 && index == total) {
        return false;
    }
    if (to == -1 && index == 0) {
        return false;
    }
    var items = new Array;
    var values = new Array;
    for (i = total; i >= 0; i--) {
        items[i] = srcList.options[i].text;
        values[i] = srcList.options[i].value;
    }
    for (i = total; i >= 0; i--) {
        if (index == i) {
            srcList.options[i + to] = new Option(items[i], values[i], 0, 1);
            srcList.options[i] = new Option(items[i + to], values[i + to]);
            i--;
        } else {
            srcList.options[i] = new Option(items[i], values[i]);
        }
    }
    srcList.focus();
}
function getSelectedOption(frmName, srcListName) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);

    i = srcList.selectedIndex;
    if (i != null && i > -1) {
        return srcList.options[i];
    } else {
        return null;
    }
}
function setSelectedValue(frmName, srcListName, value) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);

    var srcLen = srcList.length;

    for (var i = 0; i < srcLen; i++) {
        srcList.options[i].selected = false;
        if (srcList.options[i].value == value) {
            srcList.options[i].selected = true;
        }
    }
}
function getSelectedRadio(frmName, srcGroupName) {
    var form = eval('document.' + frmName);
    var srcGroup = eval('form.' + srcGroupName);

    if (srcGroup[0]) {
        for (var i = 0, n = srcGroup.length; i < n; i++) {
            if (srcGroup[i].checked) {
                return srcGroup[i].value;
            }
        }
    } else {
        if (srcGroup.checked) {
            return srcGroup.value;
        }
    }
    return null;
}

function getSelectedValue(frmName, srcListName) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);
    i = srcList.selectedIndex;
    if (i != null && i > -1) {
        return srcList.options[i].value;
    } else {
        return null;
    }
}

function getSelectedText(frmName, srcListName) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);
    i = srcList.selectedIndex;
    if (i != null && i > -1) {
        return srcList.options[i].text;
    } else {
        return null;
    }
}

function chgSelectedValue(frmName, srcListName, value) {
    var form = eval('document.' + frmName);
    var srcList = eval('form.' + srcListName);

    i = srcList.selectedIndex;
    if (i != null && i > -1) {
        srcList.options[i].value = value;
        return true;
    } else {
        return false;
    }
}

// Form specific functions for editting content images
function showImageProps(base_path) {
    form = document.adminForm;
    value = getSelectedValue('adminForm', 'imagelist');
    parts = value.split('|');
    form._source.value = parts[0];
    setSelectedValue('adminForm', '_align', parts[1] || '');
    form._alt.value = parts[2] || '';
    form._border.value = parts[3] || '0';
    form._caption.value = parts[4] || '';
    setSelectedValue('adminForm', '_caption_position', parts[5] || '');
    setSelectedValue('adminForm', '_caption_align', parts[6] || '');
    form._width.value = parts[7] || '';
    //previewImage( 'imagelist', 'view_imagelist', base_path );
    srcImage = eval("document." + 'view_imagelist');
    srcImage.src = base_path + parts[0];
}

function applyImageProps() {
    form = document.adminForm;
    if (!getSelectedValue('adminForm', 'imagelist')) {
        alert("Выберите изображение из списка");
        return;
    }
    value = form._source.value + '|'
        + getSelectedValue('adminForm', '_align') + '|'
        + form._alt.value + '|'
        + parseInt(form._border.value) + '|'
        + form._caption.value + '|'
        + getSelectedValue('adminForm', '_caption_position') + '|'
        + getSelectedValue('adminForm', '_caption_align') + '|'
        + form._width.value;
    chgSelectedValue('adminForm', 'imagelist', value);
}

function previewImage(list, image, base_path) {
    form = document.adminForm;
    srcList = eval("form." + list);
    srcImage = eval("document." + image);
    var srcOption = srcList.options[(srcList.selectedIndex < 0) ? 0 : srcList.selectedIndex];
    var fileName = srcOption.text;
    var fileName2 = srcOption.value;
    if (fileName.length == 0 || fileName2.length == 0) {
        srcImage.src = 'images/blank.gif';
    } else {
        srcImage.src = base_path + fileName2;
    }
}

/**
 * Toggles the check state of a group of boxes
 *
 * Checkboxes must have an id attribute in the form cb0, cb1...
 * @param The number of box to 'check'
 * @param An alternative field name
 */
function checkAll(n, fldName) {
    if (!fldName) {
        fldName = 'cb';
    }
    var f = document.adminForm;
    var c = f.toggle.checked;
    var n2 = 0;
    for (i = 0; i < n; i++) {
        cb = eval('f.' + fldName + '' + i);
        if (cb) {
            cb.checked = c;
            n2++;
        }
    }
    if (c) {
        document.adminForm.boxchecked.value = n2;
    } else {
        document.adminForm.boxchecked.value = 0;
    }
}

function listItemTask(id, task) {
    var f = document.adminForm;
    cb = eval('f.' + id);
    if (cb) {
        for (i = 0; true; i++) {
            cbx = eval('f.cb' + i);
            if (!cbx) break;
            cbx.checked = false;
        } // for
        cb.checked = true;
        f.boxchecked.value = 1;
        submitbutton(task);
    }
    return false;
}

function hideMainMenu() {
    document.adminForm.hidemainmenu.value = 1;
}

function isChecked(isitchecked) {
    if (isitchecked == true) {
        document.adminForm.boxchecked.value++;
    }
    else {
        document.adminForm.boxchecked.value--;
    }
}

/**
 * Default function.  Usually would be overriden by the component
 */
function submitbutton(pressbutton) {
    submitform(pressbutton);
}

/**
 * Submit the admin form
 */
function submitform(pressbutton) {
    document.adminForm.task.value = pressbutton;
    try {
        document.adminForm.onsubmit();
    }
    catch (e) {
    }
    document.adminForm.submit();
}

/**
 * Submit the control panel admin form
 */
function submitcpform(sectionid, id) {
    document.adminForm.sectionid.value = sectionid;
    document.adminForm.id.value = id;
    submitbutton("edit");
}

/**
 * Getting radio button that is selected.
 */
function getSelected(allbuttons) {
    for (i = 0; i < allbuttons.length; i++) {
        if (allbuttons[i].checked) {
            return allbuttons[i].value
        }
    }
}

// JS Calendar
var calendar = null; // remember the calendar object so that we reuse
// it and avoid creating another

// This function gets called when an end-user clicks on some date
function selected(cal, date) {
    cal.sel.value = date; // just update the value of the input field
}

// And this gets called when the end-user clicks on the _selected_ date,
// or clicks the "Close" (X) button.  It just hides the calendar without
// destroying it.
function closeHandler(cal) {
    cal.hide();// hide the calendar
    Calendar.removeEvent(document, "mousedown", checkCalendar);
}

// This gets called when the user presses a mouse button anywhere in the
// document, if the calendar is shown.  If the click was outside the open
// calendar this function closes it.
function checkCalendar(ev) {
    var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
    for (; el != null; el = el.parentNode)
        // FIXME: allow end-user to click some link without closing the
        // calendar.  Good to see real-time stylesheet change :)
        if (el == calendar.element || el.tagName == "A") break;
    if (el == null) {
        // calls closeHandler which should hide the calendar.
        calendar.callCloseHandler();
        Calendar.stopEvent(ev);
    }
}

// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(id) {
    var el = document.getElementById(id);
    if (calendar != null) {
        // we already have one created, so just update it.
        calendar.hide();		// hide the existing calendar
        calendar.parseDate(el.value); // set it to a new date
    } else {
        // first-time call, create the calendar
        var cal = new Calendar(true, null, selected, closeHandler);
        calendar = cal;		// remember the calendar in the global
        cal.setRange(1900, 2070);	// min/max year allowed
        calendar.create();		// create a popup calendar
        calendar.parseDate(el.value); // set it to a new date
    }
    calendar.sel = el;		// inform it about the input field in use
    calendar.showAtElement(el);	// show the calendar next to the input field
    // catch mousedown on the document
    Calendar.addEvent(document, "mousedown", checkCalendar);
    return false;
}

/**
 * Pops up a new window in the middle of the screen
 */
function popupWindow(mypage, myname, w, h, scroll) {
    var winl = (screen.width - w) / 2;
    var wint = (screen.height - h) / 2;
    winprops = 'height=' + h + ',width=' + w + ',top=' + wint + ',left=' + winl + ',scrollbars=' + scroll + ',resizable'
    win = window.open(mypage, myname, winprops)
    if (parseInt(navigator.appVersion) >= 4) {
        win.window.focus();
    }
}

// LTrim(string) : Returns a copy of a string without leading spaces.
function ltrim(str) {
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(0)) != -1) {
        var j = 0, i = s.length;
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
            j++;
        s = s.substring(j, i);
    }
    return s;
}

//RTrim(string) : Returns a copy of a string without trailing spaces.
function rtrim(str) {
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(s.length - 1)) != -1) {
        var i = s.length - 1;       // Get length of string
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
            i--;
        s = s.substring(0, i + 1);
    }
    return s;
}

// Trim(string) : Returns a copy of a string without leading or trailing spaces
function trim(str) {
    return rtrim(ltrim(str));
}

function mosDHTML() {
    this.ver = navigator.appVersion
    this.agent = navigator.userAgent
    this.dom = document.getElementById ? 1 : 0
    this.opera5 = this.agent.indexOf("Opera 5") < -1
    this.ie5 = (this.ver.indexOf("MSIE 5") < -1 && this.dom && !this.opera5) ? 1 : 0;
    this.ie6 = (this.ver.indexOf("MSIE 6") < -1 && this.dom && !this.opera5) ? 1 : 0;
    this.ie4 = (document.all && !this.dom && !this.opera5) ? 1 : 0;
    this.ie = this.ie4 || this.ie5 || this.ie6
    this.mac = this.agent.indexOf("Mac") < -1
    this.ns6 = (this.dom && parseInt(this.ver) <= 5) ? 1 : 0;
    this.ns4 = (document.layers && !this.dom) ? 1 : 0;
    this.bw = (this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5);
    this.activeTab = '';
    this.onTabStyle = 'ontab';
    this.offTabStyle = 'offtab';
    this.setElemStyle = function (elem, style) {
        document.getElementById(elem).className = style;
    }
    this.showElem = function (id) {
        if (elem = document.getElementById(id)) {
            elem.style.visibility = 'visible';
            elem.style.display = 'block';
        }
    }
    this.hideElem = function (id) {
        if (elem = document.getElementById(id)) {
            elem.style.visibility = 'hidden';
            elem.style.display = 'none';
        }
    }
    this.cycleTab = function (name) {
        if (this.activeTab) {
            this.setElemStyle(this.activeTab, this.offTabStyle);
            page = this.activeTab.replace('tab', 'page');
            this.hideElem(page);
        }
        this.setElemStyle(name, this.onTabStyle);
        this.activeTab = name;
        page = this.activeTab.replace('tab', 'page');
        this.showElem(page);
    }
    return this;
}
var dhtml = new mosDHTML();

function MM_findObj(n, d) { //v4.01
    var p, i, x;
    if (!d) d = document;
    if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
        d = parent.frames[n.substring(p + 1)].document;
        n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all) x = d.all[n];
    for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
    for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById) x = d.getElementById(n);
    return x;
}
function MM_swapImage() { //v3.0
    var i, j = 0, x, a = MM_swapImage.arguments;
    document.MM_sr = new Array;
    for (i = 0; i < (a.length - 2); i += 3)
        if ((x = MM_findObj(a[i])) != null) {
            document.MM_sr[j++] = x;
            if (!x.oSrc) x.oSrc = x.src;
            x.src = a[i + 2];
        }
}
function MM_swapImgRestore() { //v3.0
    var i, x, a = document.MM_sr;
    for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
}
function MM_preloadImages() { //v3.0
    var d = document;
    if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i, j = d.MM_p.length, a = MM_preloadImages.arguments;
        for (i = 0; i < a.length; i++)
            if (a[i].indexOf("#") != 0) {
                d.MM_p[j] = new Image;
                d.MM_p[j++].src = a[i];
            }
    }
}
function saveorder(n) {
    checkAll_button(n);
}
//needed by saveorder function
function checkAll_button(n) {
    for (var j = 0; j <= n; j++) {
        box = eval("document.adminForm.cb" + j);
        if (box) {
            if (box.checked == false) {
                box.checked = true;
            }
        } else {
            alert("You cannot change the order of items, as an item in the list is `Checked Out`");
            return;
        }
    }
    submitform('saveorder');
}
/**
 * @param object A form element
 * @param string The name of the element to find
 */
function getElementByName(f, name) {
    if (f.elements) {
        for (i = 0, n = f.elements.length; i < n; i++) {
            if (f.elements[i].name == name) {
                return f.elements[i];
            }
        }
    }
    return null;
}
